package com.zwh.se.io.net.udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * 基于UDP协议实现的socket编程,此处被称作发送方,当然本质上发送方和接收方并没有本质上的区别
 * UDP跟TCP有点不同在于TCP发送以流作为发送的载体,而UDP则发送单纯的数据包
 */
public class Send {
    public static void main(String[] args) throws IOException {
        //准备一个socket套接字,并绑定发送方的端口
        DatagramSocket datagramSocket = new DatagramSocket(8080);
        //准备要发送的信息
        byte[] bytes = "接收方会接收到的消息".getBytes();
        DatagramPacket datagramPacket = new DatagramPacket(
                bytes,//要发送的数据,需要转为字节数组
                bytes.length,//字节数组的长度
                InetAddress.getByName("localhost"),//封装接收方的ip
                9999//指定接收方的端口号
        );
        //发送
        datagramSocket.send(datagramPacket);
        //接收
        byte[] buffer = new byte[1024];
        DatagramPacket datagramPacket2 = new DatagramPacket(buffer,buffer.length);
        datagramSocket.receive(datagramPacket2);//接收完以后 datagramPacket2里面就填充好内容了
        byte[] data = datagramPacket2.getData();
        String msg = new String(data, 0, datagramPacket2.getLength());//dp.getLength()数组包中的有效长度
        System.out.println("响应信息：" + msg);
        //关闭资源
        datagramSocket.close();
    }
}
